﻿using System;



namespace kostenbuch
{
    class Calculator
    {
        // Variablen mit Getter Methoden //
        private double[] katPercent = new double[kostenbuch.Properties.Settings.Default.Kategorie.Count]; //Ausgaben pro Kategorie in Prozent in Reihenfolge wie in Settings
        private double[] inKatPercent = new double[kostenbuch.Properties.Settings.Default.Kategorie.Count]; //Eingaben pro Kategorie in Prozent in Reihenfolge wie in Settings
        private double[] accountBalance = new double[kostenbuch.Properties.Settings.Default.Konto.Count]; //Kontostände der Konten in Reihenfolge wie in Settings
        private double[] aProKonto = new double[kostenbuch.Properties.Settings.Default.Konto.Count]; //Ausgaben pro Konto in Reihenfolge wie in Settings
        private double[] eProKonto = new double[kostenbuch.Properties.Settings.Default.Konto.Count]; //Eingaben pro Konto in Reihenfolge wie in Settings
        private double sumOfIncome = 0; //Summe aller Eingaben
        private double sumOfExpenses = 0; //Summe aller Ausgaben

        // Variablen ohne Getter Methoden //
        private double[] aProKategorie = new double[kostenbuch.Properties.Settings.Default.Kategorie.Count]; //Ausgaben pro Kategorie in Reihenfolge wie in Settings
        private double[] eProKategorie = new double[kostenbuch.Properties.Settings.Default.Kategorie.Count]; // Eingaben pro Kategorie in Reihenfolge wie in Settings
        
        public Calculator()
        {
            readValuesForKategorie();
            readValuesForKonto();
            calcAccountBalance();
            calcKatPercent();
            calcInKatPercent();
        }
        #region Getter-Methoden
        public double[] getKatPercent()
        {
            return katPercent;
        }
        public double[] getInKatPercent()
        {
            return inKatPercent;
        }
        public double[] getAProKonto()
        {
            return aProKonto;
        }
        public double[] getEProKonto()
        {
            return eProKonto;
        }
        public double[] getAccountBalance()
        {
            return accountBalance;
        }
        public double getSumOfIncome()
        {
            return sumOfIncome;
        }
        public double getSumOfExpenses()
        {
            return sumOfExpenses;
        }
        #endregion
        //Ließt die gespeicherten Werte der Ausgaben und Eingaben aus und rechnet sie pro Konto zusammen
        /* Dieses Implementationsverfahren gewählt, um eventuell später aProKonto und eProKonto noch verwenden zu können */
        private void readValuesForKonto()
        {
            for (int i = 0; i < kostenbuch.Properties.Settings.Default.Konto.Count; i++)
            {
                eProKonto[i] = 0;
                aProKonto[i] = 0;
                for (int j = 0; j < TablePage.eintragList.Count; j++)
                {
                    Console.WriteLine("J: " + TablePage.eintragList[j].konto);
                    if (TablePage.eintragList[j].konto == kostenbuch.Properties.Settings.Default.Konto[i])
                    {
                        if (TablePage.eintragList[j].ausgabe)
                        {
                            aProKonto[i] = aProKonto[i] + TablePage.eintragList[j].betrag;
                        }
                        else
                        {
                            eProKonto[i] = eProKonto[i] + TablePage.eintragList[j].betrag;
                        }
                    }
                }
                Console.WriteLine("Eingaben Konten: " + eProKonto[i]);
                Console.WriteLine("Ausgaben Konto: " + aProKonto[i]);
            }
        }
        //Ließt die gespeicherten Werte der Ausgaben und Eingaben aus und rechnet sie pro Kategorie zusammen
        private void readValuesForKategorie()
        {
            for (int i = 0; i < kostenbuch.Properties.Settings.Default.Kategorie.Count; i++)
            {
                aProKategorie[i] = 0;
                eProKategorie[i] = 0;
                for (int j = 0; j < TablePage.eintragList.Count; j++)
                {
                    if (TablePage.eintragList[j].kategorie == kostenbuch.Properties.Settings.Default.Kategorie[i])
                    {
                        if (TablePage.eintragList[j].ausgabe)
                        {
                            aProKategorie[i] = aProKategorie[i] + TablePage.eintragList[j].betrag;
                        }
                        else
                        {
                            eProKategorie[i] = eProKategorie[i] + TablePage.eintragList[j].betrag;
                        }
                    }
                }
                Console.WriteLine(kostenbuch.Properties.Settings.Default.Kategorie[i]);
                Console.WriteLine(aProKategorie[i]);
            }
        }
        //Berechnet die Kontostände der Konten
        private void calcAccountBalance()
        {
            for (int i = 0; i < eProKonto.Length; i++)
            {
                accountBalance[i] = eProKonto[i] - aProKonto[i];
                Console.WriteLine("Konto " + i + ": " + accountBalance[i]);
            }
        }
        //Berechnet die Ausgaben pro Kategorie in Prozent und speichert diese in dem Array katPercent und speichert Gesamtausgaben in sumOfExpenses
        private void calcKatPercent()
        {
            //Berechnet Gesamtausgaben
            for (int i = 0; i < aProKategorie.Length; i++)
            {
                sumOfExpenses += aProKategorie[i];
            }
            //Berechnet die Prozentwerte pro Kategorie
            for (int i = 0; i < aProKategorie.Length; i++)
            {
                katPercent[i] = aProKategorie[i] / sumOfExpenses * 100;
                Console.WriteLine(katPercent[i]);
            }
            Console.WriteLine("Ausgaben: " + sumOfExpenses);
        }
        //Berechnet die Eingaben pro Kategorie in Prozent und speichert diese im Array inKatPercent und speichert Gesamteingaben in sumOfIncome
        private void calcInKatPercent()
        {
            //Berechnet Gesamteingaben
            for (int i = 0; i < eProKategorie.Length; i++)
            {
                sumOfIncome += eProKategorie[i];
            }
            //Berechnet die Prozentwerte pro Kategorie
            for (int i = 0; i < eProKategorie.Length; i++)
            {
                inKatPercent[i] = eProKategorie[i] / sumOfIncome * 100;
                Console.WriteLine(eProKategorie[i] + ": " + inKatPercent[i]);
            }
            Console.WriteLine("Eingaben: " + sumOfIncome);
        }
   
    }
}
